/**
 * @ClassName LC7
 * 整数反转
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * <p>
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * @Author ykx
 * @Date 2024/3/3 11:31
 * @Version 1.0
 */
public class LC7 {

    public static void main(String[] args) {
        System.out.println(reverse(-2147483648));
    }

    public static int reverse(int x) {
        long reverse = 0;

        // 若x是负数，也当做正数处理，最后结果再添加负号
        long y = Math.abs(x);

        // 判断x是几位数
        int log10 = (int) Math.log10(y);
        for (int i = 0; i <= log10; i++) {
            int bit = (int) ((y % Math.pow(10, i + 1)) / Math.pow(10, i));
            reverse += bit * Math.pow(10, log10 - i);
        }

        if (reverse > Integer.MAX_VALUE || reverse < Integer.MIN_VALUE || x == 0) {
            return 0;
        }

        // 原先若是负数，需要把负号添上
        reverse = reverse * (x / Math.abs(x));

        return (int) reverse;
    }
}
